package oop.controller.action.topicconst;

import java.sql.SQLException;
import java.util.List;

import oop.controller.action.DefaultAction;
import oop.data.SectionStructure;
import oop.data.TestStructure;
import oop.db.dao.SectionStructureDAO;
import oop.db.dao.TestStructureDAO;
import oop.db.dao.TopicConstraintDAO;

import org.apache.commons.lang.StringUtils;

import com.oreilly.servlet.ParameterNotFoundException;

public class CreateAction extends DefaultAction {
	
	public CreateAction() {
	}

	@Override
	public void performImpl() throws Exception {
		long testStructureId = Long.parseLong(request.getParameter("teststruct"));
		TestStructure testStructure = TestStructureDAO.fetchById(testStructureId).get(0);
		request.setAttribute("test", testStructure);

		String submit = request.getParameter("submit");
		if ("add".equals(submit)) {
			doCreate(testStructureId);
		}
	}

	private void doCreate(long testStructureId) throws SQLException {
		String sectionIdStr = request.getParameter("section");
		SectionStructure sectionStructure;
		if (StringUtils.isEmpty(sectionIdStr)) {
			List<SectionStructure> sectionStructures = SectionStructureDAO
					.fetchByTestStructure(testStructureId);
			if (sectionStructures.isEmpty()) {
				sectionStructure = SectionStructureDAO.create(null,
						testStructureId, 1);
			} else {
				if (sectionStructures.size() == 1) {
					sectionStructure = sectionStructures.get(0);
				} else {
					sectionError = "Bạn cần chọn một mục.";
					return;
				}
			}
		} else {
			try {
				long sectionId = Long.parseLong(sectionIdStr);
				sectionStructure = SectionStructureDAO.fetchById(sectionId)
						.get(0);
			} catch (NumberFormatException ex) {
				sectionError = "Mã số mục không hợp lệ.";
				return;
			}
		}

		int quantity;
		try {
			quantity = getParams().getInt("quantity");
			if (quantity <= 0) {
				quantityError = "Số lượng phải nguyên dương.";
				return;
			}
		} catch (ParameterNotFoundException ex) {
			quantityError = "Bạn cần nhập số lượng.";
			return;
		} catch (NumberFormatException ex) {
			quantityError = "Số lượng không hợp lệ.";
			return;
		}

		long topicId;
		try {
			topicId = getParams().getLong("topicid");
		} catch (ParameterNotFoundException ex) {
			topicError = "Bạn cần chọn chủ đề.";
			return;
		} catch (NumberFormatException ex) {
			topicError = "Mã số chủ đề không hợp lệ.";
			return;
		}

		try {
			TopicConstraintDAO.create(sectionStructure.getId(), topicId,
					quantity);
			setNextAction("teststruct.view&tsv_id=" + testStructureId);
		} catch (SQLException ex) {
			if (ex.getErrorCode() == 1062) {
				topicError = "Chủ đề đã được thêm từ trước.";
			} else if (ex.getErrorCode() == 1452) {
				topicError = "Chủ đề không tồn tại.";
			} else {
				throw ex;
			}
		}
	}

	private String sectionError = null;
	private String topicError = null;
	private String quantityError = null;

	public String getSectionError() {
		return sectionError;
	}
	
	public String getTopicError() {
		return topicError;
	}
	
	public String getQuantityError() {
		return quantityError;
	}
	
}
